home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / utils / file / hex / dump-1.000 / dump-1 / dump-1.0 / cnv.c next >
Encoding:
C/C++ Source or Header  |  1995-08-07  |  3.2 KB  |  221 lines

  1. #ifndef lint
  2. static char *RCSid = "$Header: /dd/USR/MIKEH/YUP/rcs/cnv.c_v 1.1 94/06/03 18:06:22 mikeh Exp $";
  3. #endif
  4.  
  5. /*
  6.  * $Log:    cnv.c_v $
  7.  * Revision 1.1  94/06/03  18:06:22  mikeh
  8.  * Initial revision
  9.  * 
  10.  */
  11.  
  12. /* Cnv.c - conversion routines for od.c */
  13.  
  14. #define CNV    /* For cnv.h */
  15.  
  16. #include <stdio.h>
  17. #include <ctype.h>
  18. #include "cnv.h"
  19.  
  20. static char oint[40];
  21.     
  22. char *hexhdr[] = {
  23.     "  Offset    0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0 2 4 6 8 A C E",
  24.     " --------  ---- ---- ---- ---- ---- ---- ---- ----  ----------------",
  25.     NULL
  26. };
  27.  
  28. char *octhdr[] = {
  29.     " Oct. Offset    0   1   2   3   4   5   6   7   0 2 4 6 ",
  30.     " ------------  --- --- --- --- --- --- --- ---  --------",
  31.     NULL
  32. };
  33.  
  34. char *binhdr[] = {
  35. "   Binary Offset                      00       01     01",
  36. " --------------------------------  -------- --------  --",
  37.     NULL
  38. };
  39.  
  40. char *dechdr[] = {
  41.     " Dec. Offset   0   1   2   3   4   5   6   7   8   9   0 2 4 6 8",
  42.     " -----------  --- --- --- --- --- --- --- --- --- ---  ----------",
  43.     NULL
  44. };
  45.  
  46. static char *hexfmt = " %-8.8s  %-40.40s %-16.16s\n";
  47. static char *octfmt = " %-12.12s  %-32.32s %-8.8s\n";
  48. static char *binfmt = " %-32.32s  %-18.18s %-2.2s\n";
  49. static char *decfmt = " %-11.11s  %-40.40s %-10.10s\n";
  50.  
  51. char *outhex(s,ch)
  52. char *s;
  53. int  ch;
  54. {
  55.     static int i = 0;
  56.     char tmpstr[10];
  57.     
  58.     sprintf(tmpstr,"%02x",ch);
  59.  
  60.     *s++ = tmpstr[0];
  61.     *s++ = tmpstr[1];
  62.     if (i)
  63.         *s++ = ' ';
  64.     *s   = '\0';
  65.     i = (i) ? 0 : 1;
  66.     return (s);
  67. }
  68.  
  69.  
  70. char *hexint(val)
  71. int  val;
  72. {
  73.     char *s = oint;
  74.     char ch;
  75.     int  i;
  76.     
  77.     sprintf(oint,"%08x",val);
  78.  
  79.     return (oint);
  80. }
  81.  
  82.  
  83. char *outoct(s,ch)
  84. char *s;
  85. int  ch;
  86. {
  87.     *s++ = '0' + ((ch >> 6) & 0x3);
  88.     *s++ = '0' + ((ch >> 3) & 0x7);
  89.     *s++ = '0' + (ch & 0x7);
  90.     *s++ = ' ';
  91.     *s = '\0';
  92.     return (s);
  93. }
  94.  
  95.  
  96. char *octint(val)
  97. int  val;
  98. {
  99.     char *s = oint;
  100.     char ch;
  101.     int  i;
  102.     
  103.     for (i = 3; i >= 0; i--)
  104.     {
  105.         ch = (val >> (8 * i)) & 0xFF;
  106.         *s++ = '0' + ((ch >> 6) & 0x3);
  107.         *s++ = '0' + ((ch >> 3) & 0x7);
  108.         *s++ = '0' + (ch & 0x7);
  109.     }
  110.     *s = '\0';
  111.     return (oint);
  112. }
  113.  
  114. char *outbin(s,ch)
  115. char *s;
  116. int  ch;
  117. {
  118.     int i;
  119.  
  120.     for (i = 7 ; i >= 0 ; i--)
  121.     {
  122.         *s++ = '0' + ((ch >> i) & 0x1);
  123.     }
  124.     *s++ = ' ';
  125.     *s = '\0';
  126.     return (s);
  127. }
  128.  
  129. char *binint(val)
  130. int  val;
  131. {
  132.     char *s = oint;
  133.     char ch;
  134.     int  i, j;
  135.     
  136.     for (i = 3; i >= 0; i--)
  137.     {
  138.         ch = (val >> (8 * i)) & 0xFF;
  139.         for (j = 7 ; j >= 0 ; j--)
  140.         {
  141.             *s++ = '0' + ((ch >> j) & 0x1);
  142.         }
  143.     }
  144.     *s = '\0';
  145.     return (oint);
  146. }
  147.  
  148. char *outdec(s,ch)
  149. char *s;
  150. int  ch;
  151. {
  152.     char tmpstr[10];
  153.     
  154.     sprintf(tmpstr,"%03d",ch & 0xFF);
  155.  
  156.     *s++ = tmpstr[0];
  157.     *s++ = tmpstr[1];
  158.     *s++ = tmpstr[2];
  159.     *s++ = ' ';
  160.     *s   = '\0';
  161.  
  162.     return (s);
  163. }
  164.  
  165.  
  166. char *decint(val)
  167. int  val;
  168. {
  169.     char *s = oint;
  170.     char ch;
  171.     int  i;
  172.     
  173.     sprintf(oint,"%011d",val);
  174.  
  175.     return (oint);
  176. }
  177.  
  178.  
  179. initialize(base)
  180. int base;
  181. {
  182.     switch (base)
  183.     {
  184.     case HEX:
  185.         maxline = 16;
  186.         maxwide = 16;
  187.         outtype = outhex;
  188.         typeint = hexint;
  189.         hdrs    = hexhdr;
  190.         fmt     = hexfmt;
  191.         break;
  192.     case BINARY:
  193.         maxline = 16;
  194.         maxwide = 2;
  195.         outtype = outbin;
  196.         typeint = binint;
  197.         hdrs    = binhdr;
  198.         fmt     = binfmt;
  199.         break;
  200.     case DECIMAL:
  201.         maxline = 10;
  202.         maxwide = 10;
  203.         outtype = outdec;
  204.         typeint = decint;
  205.         hdrs    = dechdr;
  206.         fmt     = decfmt;
  207.         break;
  208.     case OCTAL:
  209.     default:
  210.         maxline = 8;
  211.         maxwide = 8;
  212.         outtype = outoct;
  213.         typeint = octint;
  214.         hdrs    = octhdr;
  215.         fmt     = octfmt;
  216.     }
  217. }
  218.  
  219.  
  220.  
  221.